package cn.demoncat.util.mongo.util;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapping.Document;

import com.mongodb.client.MongoClients;

import cn.demoncat.util.lang.ReflectClassUtil;

/**
 * MongoDB管理工具
 * 
 * @author 延晓磊
 *
 * @since 2020年8月28日
 */
public class MongoUtil {
	
	// 集合POJO类:集合名
	private static final Map<String, String> collections = new HashMap<>();

	/**
	 * 创建MongoTemplate
	 * 
	 * @param url		服务端地址：mongodb://localhost:27017,localhost:27018
	 * @param datebase
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年8月28日
	 */
	public static MongoTemplate createTemplate(String url, String datebase) {
		return new MongoTemplate(MongoClients.create(url), datebase);
	}
	
	/**
	 * 获取集合名
	 * 
	 * @param collectionClass	集合POJO类
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年8月31日
	 */
	public static String getCollectionName(Class<?> collectionClass) {
		String name = collections.get(collectionClass.getName());
		if (name == null) {
			// 通过注解获取
			Document anno = collectionClass.getAnnotation(Document.class);
			if (anno != null && StringUtils.isNotBlank(anno.value())) {
				name = anno.value();
			} else if (anno != null && StringUtils.isNotBlank(anno.collection())) {
				name = anno.collection();
			}else {
				// 类名驼峰
				name = ReflectClassUtil.getHumpName(collectionClass);
			}
			// 缓存映射
			collections.put(collectionClass.getName(), name);
		}
		return name;
	}
	
}
